#include "../inc/button.h"

// Button 构造函数，初始化按钮
Button::Button(UI_Object* parent)
{
  // 设置父对象
  this->parent = parent;

  // 创建一个 LVGL 按钮对象，并将其父对象设置为传入的 parent
  this_object = lv_btn_create(parent->get_lv_obj_t());

  // 设置按钮的宽度和高度为主题定义的常量
  this->width = THEME_BUTTON_SWITCH_WIDTH_PRIMARY;
  this->height = THEME_BUTTON_SWITCH_HEIGHT_PRIMARY;

  // 设置 LVGL 按钮对象的高度和宽度
  lv_obj_set_height(this_object, this->height);
  lv_obj_set_width(this_object, this->width);

  // 设置按钮内容的对齐方式为居中
  lv_obj_set_flex_align(this_object, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);

  // 设置按钮的背景颜色为主题定义的蓝色
  lv_obj_set_style_bg_color(this_object, lv_color_hex(THEME_COLOR_BLUE), LV_PART_MAIN | LV_STATE_DEFAULT);

  // 设置按钮的圆角半径为按钮高度的一半
  lv_obj_set_style_radius(this_object, THEME_BUTTON_HEIGHT_COMMON / 2, LV_PART_MAIN | LV_STATE_DEFAULT);

  // printf("%d\n", lv_obj_get_height(this_object));
}

// Button 析构函数
Button::~Button()
{
  // 析构函数内容为空
}

// 设置按钮的文本内容和颜色
void Button::set_text(const char* text, uint32_t color)
{
  // 如果标签对象已存在，先删除它
  if (this->label != NULL)
  {
    lv_obj_del(this->label);
  }

  // 创建一个新的 LVGL 标签对象，并将其父对象设置为按钮
  this->label = lv_label_create(this_object);

  // 设置标签的文本内容，并支持颜色格式化
  lv_label_set_text_fmt(this->label, "#%x %s#", color, text);

  // 启用标签的重新着色功能，以支持文本中的颜色代码
  lv_label_set_recolor(this->label, true);
}